package cn.edu.jsu.nrs.service;

import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;

import cn.edu.jsu.nrs.dao.NewsDao;
import cn.edu.jsu.nrs.model.News;
import cn.edu.jsu.nrs.util.PageInfor;
import cn.edu.jsu.nrs.util.PageResult;

/**
 * 
 * @author:YYH
 * @date:2013-1-24 下午09:20:35
 * @update-date:2013-1-24 下午09:20:35
 * @version:1.0
 * @project_name:NewsReleaseSystem
 * @description:新闻业务逻辑类
 */
@Component
public class NewsService {
	private NewsDao newsDao;

	@Resource
	public void setNewsDao(NewsDao newsDao) {
		this.newsDao = newsDao;
	}

	public NewsDao getNewsDao() {
		return newsDao;
	}

	/****
	 * 添加新闻
	 * 
	 * @param news
	 * @return
	 */
	public boolean addNews(News news) {
		if (newsDao.save(news) > 0) {
			return true;
		}
		return false;
	}

	/****
	 * 删除新闻
	 * 
	 * @param news
	 */
	public void deleteNews(News news) {
		newsDao.delete(news);
	}

	/****
	 * 根据id删除新闻
	 * 
	 * @param id
	 * @return
	 */
	public boolean deleteNewsById(int id) {
		if (newsDao.deleteNewsById(id) > 0) {
			return true;
		}
		return false;

	}

	/***
	 * 批量删除新闻
	 * 
	 * @param newslist
	 */
	public void deleteNewsList(List<News> newslist) {
		newsDao.deleteNewsList(newslist);

	}

	/****
	 * 根据新闻id查找新闻
	 * 
	 * @param id
	 * @return
	 */
	public News findNewsById(int id) {
		return newsDao.queryNewsById(id);
	}

	/***
	 * 根据新闻类型id获得新闻列表
	 * 
	 * @param typeId
	 * @return
	 */
	public List<News> getNewsListByTypeId(int typeId) {
		return newsDao.queryNewsByTypeId(typeId);
	}

	/**
	 * 修改新闻
	 * 
	 * @param news
	 */
	public void updateNews(News news) {
		newsDao.update(news);
	}

	/**
	 * 添加点击次数
	 */
	public void addClickCount() {
		newsDao.addClickCount();
	}

	/**
	 * 获取十条热点新闻
	 * 
	 * @return
	 */
	public List<News> getHotNews(final int first, final int count) {
		return newsDao.queryHotNews(first, count);
	}

	/**
	 * 查询10条即时新闻
	 * 
	 * @param first
	 * @param count
	 * @return
	 */
	public List<News> getTopNews(final int first, final int count) {
		return newsDao.queryTopNews(first, count);
	}

	/**
	 * 根据类型Id查找新闻列表
	 * @param typeId
	 * @param count
	 * @return
	 */
	public List<News> getNewsListByTypeIdAndCount(final int typeId,final int count){
		return newsDao.queryNewsListByTypeIdAndCount(typeId, count);
	}

	/**
	 * 查询新闻的总记录数
	 * 
	 * @return
	 */
	public int getNewsCounts() {
		return newsDao.queryNewsCounts();
	}

	/***
	 * 根据新闻类别查询新闻的总记录数
	 * 
	 * @param typeId
	 * @return
	 */
	public int getNewsCounts(int typeId) {
		return newsDao.queryNewsCounts(typeId);
	}

	/**
	 * 新闻分页
	 */
	public List<News> paging(final int beginIndex, final int size,
			final String propertyName) {
		return newsDao.paging(beginIndex, size, propertyName);

	}

	/**
	 * 根据类别查询分页新闻 新闻分页
	 */
	public List<News> pagingByTypeId(final int typeId, final int beginIndex,
			final int size) {
		return newsDao.pagingByTypeId(typeId, beginIndex, size);
	}

	/**
	 * 获取分页列表，及分页信息（分页结果）
	 * 
	 * @param totalCount
	 * @param pageSize
	 * @param page
	 * @param orderPropertyName
	 * @return
	 */
	public PageResult getPagenation(int totalCount, int pageSize, int page,
			String orderPropertyName) {
		PageResult pageResult = new PageResult();

		PageInfor pageInfor = new PageInfor(totalCount, pageSize, page);
		pageResult.setPageInfor(pageInfor);
		List<News> newsList = paging((page - 1) * pageSize, pageSize,
				orderPropertyName);
		pageResult.setList(newsList);
		return pageResult;
	}

	/**
	 * 根据新闻类别获取新闻分页信息结果
	 * 
	 * @param typeId新闻类别
	 * @param totalCount新闻总记录数
	 * @param pageSize页的大小
	 * @param page页数
	 * @param orderPropertyName
	 *            排序的属性名
	 * @return
	 */
	public PageResult getPagenation(int typeId, int totalCount, int pageSize,
			int page, String orderPropertyName) {
		PageResult pageResult = new PageResult();

		PageInfor pageInfor = new PageInfor(totalCount, pageSize, page);
		pageResult.setPageInfor(pageInfor);
		List<News> newsList = pagingByTypeId(typeId, (page - 1) * pageSize,
				pageSize);
		pageResult.setList(newsList);
		return pageResult;
	}
	
	/***
	 * 根据关键字条件模糊查询新闻	
	 * @param beginIndex
	 * @param count
	 * @param keyword
	 * @param sord
	 * @param sidx
	 * @return
	 */
	public List<News> getNewsListBySearch(final int beginIndex,final int count,final String keyword,final String sord,final String sidx){
		return newsDao.queryNewsListBySearch(beginIndex, count, keyword, sord, sidx);
	}
	
	/**
	 * 根据关键字条件模糊获得新闻记录条数
	 */
	public int getNewsCounts(final String keyword){
		return newsDao.queryNewsCounts(keyword);
	}
}
